#ifndef __STATE_MACHINE_H__
#define __STATE_MACHINE_H__

#include <atomic>
#include <deque>
#include <map>
#include <mutex>
#include <stack>
#include <string>
#include <vector>

enum class Priority
{
    LOW,
    MEDIUM,
    HIGH
};
enum class Status
{
    RUNNING,
    PAUSED,
    STOPPED,
    PENDING,
    COMPLETED
};  // 新增COMPLETED状态

struct Event
{
    enum class Type
    {
        EMERGENCY_STOP,
        PATH_UPDATE,
        OBSTACLE_DETECTED
    };
    Type type;
    Priority priority;
    std::string desc;
};

struct TaskContext
{
    int progress = 0;                 // 执行进度（如步骤数）
    std::map<std::string, int> vars;  // 中间变量（如“当前速度”“转向角度”）
};

struct TaskNode
{
    enum class TaskType
    {
        PATH_PLANNING,
        BRAKE,
        STEERING,
        UNKNOWN
    };
    TaskType task_type;
    uint64_t uid;  // 任务唯一标识符
    Status status;
    Priority priority;
    std::string param;
    bool is_cancellable;    // 是否可被取消（true=可覆盖，false=必须执行）
    std::string eventName;  // 事件名称
    TaskContext context;    // 新增：任务上下文
};

extern TaskNode current_task;
extern std::deque<TaskNode> new_tasks;
extern std::stack<TaskNode> task_history;
extern std::deque<Event> event_queue;
extern std::mutex mtx;
extern std::atomic<bool> is_running;
extern std::atomic<bool> all_tasks_processed;

void init_tasks_interface();
TaskNode execute_task(TaskNode task);
void pause_current_task();
void rollback_task_interface();
void process_event_interface(const Event& event);
void schedule_next_task();  // 新增: 任务完成后调度下一个任务
void post_event_interface(const Event& event);
void event_processing_loop_interface();

#endif  // __STATE_MACHINE_H__